package com.xiangge.sort;

import java.util.Arrays;

public class SortDemo2 {
    public static void main(String[] args) {
        /*
        将数组arr={3,5,4,2,1}进行选择排序，从小到大排好顺序
        */
        // 选择排序
        // 定义数组arr
        int[] arr = {3,5,4,2,1};
        sort(arr);
        // 输出arr
        System.out.println(Arrays.toString(arr));
    }
    private static void sort(int[] arr) {
        // 使用for循环来定义排序的轮数,i代表轮数
        for (int i = 1; i < arr.length; i++) {
            // i = 1时，求出[0,4]范围的最小值位置index
            // i = 2时，求出[1,4]范围的最小值位置index
            // i = 3时，求出[2,4]范围的最小值位置index
            // i = 4时，求出[3,4]范围的最小值位置index
            // i = i时，求出[i-1,4]范围的最小值位置index

            // 求第i轮范围的最小值位置,假设最左边的元素为最小值
            int min = arr[i-1];
            int minIndex = i-1;
            // 遍历数组进行比较
            for (int j = i-1; j < arr.length; j++) {
                if (min > arr[j]){
                    min = arr[j];
                    minIndex = j;
                }
            }
            // 将minIndex位置和i-1（最左边）位置的元素交换
            int temp = arr[minIndex];
            arr[minIndex] = arr[i-1];
            arr[i-1] = temp;
        }
    }

    public static void main1(String[] args) {
        /*
        将数组arr={5, 12, 90, 18, 77, 76, 45, 28, 59, 72}进行选择排序，从小到大排好顺序
        */
        int[] arr = {5, 12, 90, 18, 77, 76, 45, 28, 59, 72};
        // 进行循环比较
        for (int i = 1; i < arr.length; i++) {
            // 定义int类型的变量来表示最小值和位置
            int min = arr[i-1];
            int minIndex = i-1;
            // 遍历数组进行依次比较
            for (int j = i-1; j < arr.length; j++) {
                // 进行比较
                if (min > arr[j]){
                    min = arr[j];
                    minIndex = j;
                }
            }
            // 得到最小值和位置后在进行交换
            int temp = arr[minIndex];
            arr[minIndex] = arr[i-1];
            arr[i-1] = temp;
        }
        System.out.println(Arrays.toString(arr));
    }
}
